package cn.yunyichina.openapi.proxy.utils;

import cn.yunyichina.openapi.proxy.config.HttpServerConfig;
import cn.yunyichina.utils.commons.HttpContentType;
import cn.yunyichina.utils.commons.IdCardUtils;
import cn.yunyichina.utils.commons.StringUtils;
import cn.yunyichina.utils.log.Log;
import cn.yunyichina.utils.log.constant.LogScene;
import cn.yunyichina.utils.security.AesEncryption;
import cn.yunyichina.utils.security.Base64Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by kevin on 2018/1/10.
 */
public class RegexUtil {
//    /*身份证号匹配正则*/
//    private static final String ID_CARD_NO_REGEX="\"[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)\"";
//
//    /*加密后的身份证号正则*/
//    private static final String AES_ID_CARD_NO_REGEX="##SFZTM\\|([\\s\\S]*?)\\|([\\s\\S]*?)\\|([\\d]*?)\\|([\\d]*?)\\|([\\s\\S]*?)\\$\\$";
//
//    /**
//     * 过滤入参
//     * @param method
//     * @param request
//     * @return
//     */
//    public static String filterRequestJson(String method,String request){
//        String result;
//        result=request;
//
//        if(StringUtils.isBlank(request)){
//            return request;
//        }
//
//        Pattern r = Pattern.compile(AES_ID_CARD_NO_REGEX);
//        Matcher matcher=r.matcher(request);
//        while (matcher.find()) {
//            String matchStr=matcher.group();
//            String desStr;
//            try {
//                String[] strs=matchStr.split("\\|");
//                String encryptStr=strs[1];
//                desStr=Base64Method.convertSafe64ToBase64(encryptStr);
//                desStr= AesEncryption.desencrypt(desStr,HttpServerConfig.getConfig().getAesKey(),
//                        HttpServerConfig.getConfig().getAesKey());
//                desStr=desStr.trim();
//            } catch (Exception e) {
//                Log.e(LogScene.PROXY,method+"AES解密身份证失败",e);
//                return request;
//            }
//
//            if(StringUtils.isBlank(desStr)){
//                return request;
//            }
//            result=result.replace(matchStr,desStr);
//        }
//        return result;
//    }
//
//    /**
//     * 过滤出参
//     * @param appId
//     * @param method
//     * @param response
//     * @return
//     */
//    public static String filterResponseJson(String appId,String method,String response){
//        if(StringUtils.isBlank(appId)){
//            return response;
//        }
//
//        if(!HttpServerConfig.getConfig().getSensitiveAppCodeMap().containsKey(appId)){
//            return response;
//        }
//
//        if(!HttpServerConfig.getConfig().getSensitiveMethodMap().containsKey(method.toLowerCase())){
//            return response;
//        }
//
//        if(StringUtils.isBlank(response)){
//            return response;
//        }
//
//        String result=response;
//        if(StringUtils.isBlank(HttpServerConfig.getConfig().getAesKey())||
//                HttpServerConfig.getConfig().getAesKey().length()!=16){
//            Log.i(LogScene.PROXY,"{}脱敏密钥未配置或长度不等于16，请检查，脱敏不生效!",method);
//            return response;
//        }
//
//        Pattern r = Pattern.compile(ID_CARD_NO_REGEX);
//        Matcher matcher=r.matcher(response);
//        while (matcher.find()) {
//            String matchStr=matcher.group().replace("\"","");
//            String aesStr="";
//            try {
//                aesStr= AesEncryption.encrypt(matchStr,HttpServerConfig.getConfig().getAesKey(),
//                        HttpServerConfig.getConfig().getAesKey());
//                aesStr= Base64Method.convertBase64ToSafe64(aesStr);
//            } catch (Exception e) {
//                Log.e(LogScene.PROXY,method+"AES加密身份证失败",e);
//                return response;
//            }
//            String patSex=String.valueOf(IdCardUtils.getSexFlagByIdCard(matchStr));
//            String patAge=String.valueOf(IdCardUtils.getAgeByIdCard(matchStr));
//            String patBirth=IdCardUtils.getBirthByIdCard(matchStr);
//            if(patBirth!=null&&patBirth.length()==8){
//                patBirth=patBirth.substring(0,4)+"-"+patBirth.substring(4,6)+"-"+patBirth.substring(6,8);
//            }
//            String encryptIdCardNo=matchStr.substring(0,1)+"****************"+matchStr.substring(matchStr.length()-1);
//            aesStr="##SFZTM|"+aesStr+"|"+encryptIdCardNo+"|"+patSex+"|"+patAge+"|"+patBirth+"$$";
//            result=result.replace(matchStr,aesStr);
//        }
//        return result;
//    }
//
//
//    public static void main(String[] args) throws Exception {
//        /**
//         * 测试出参脱敏
//         */
//        String responseStr="{\"result_code\":\"0\",\"result_message\":\"success\",\"result\":{\"card_type\":\"0\",\"real_name\":\"朱恒\",\"gender\":\"M\",\"openid\":\"2088112714223975\",\"card_no\":\"420704199312271612\",\"card_no\":\"441622198512246013\",\"card_no\":\"44162219851224601X\",\"card_no\":\"440525600625103\",\"card_no\":\"YRP201801191007274952\",\"access_token\":\"medicalB17fa4700b3f843989118b9bc3ad5cX97\"}}";
//        String method="yyt.base.bindCard.list.get";
//        String appId="yyt48fe49dbe6eb1cee";
//        HttpServerConfig.getConfig().initHttpConfig();
//        String result=filterResponseJson(appId,method,responseStr);
//        System.out.println("脱敏结果:"+result);
//
//        /**
//         * 测试入参还原
//         */
//        result=filterRequestJson(method,result);
//        System.out.println("还原结果:"+result);
//    }
}
